package top.humbleyuan.test;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;

/**
 * @Author HumbleYuan
 * @Date 2020/3/29 18:36
 * @Des
 */
public class BaiDuExamDemo {
    public static void main(String[] args) {
        //d1();

        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {
            int n = sc.nextInt();

//            PriorityQueue<Integer> queue = new PriorityQueue<>(n,
////                    (num1, num2) -> {
////                        return num2.compareTo(num1);
////                    });

            int[] nums = new int[n];
            for (int i = 0; i < n; i++) {
                nums[i] = sc.nextInt();
            }

//            Arrays.sort(nums);
//            int count = 0;
//            while (nums[n - 1] >= n) {
//                count ++;
//                nums[n - 1] -=  n;
//                for (int i = 0; i < n - 1; i++) {
//                    nums[i] += 1;
//                }
//                Arrays.sort(nums);
//            }
//
//            System.out.println(count);


            for (int i = nums.length / 2 - 1; i >= 0; i--) {
                buildHeap(i, nums, nums.length);
            }

            int count = 0;
            while (nums[0] >= n) {
                nums[0] -= n;
                for (int i = 1; i < n; i++) {
                    nums[i] += 1;
                }
                buildHeap(0, nums, nums.length);  // 这里只要调整顶上交换元素即可
                count++;
            }

            System.out.println(count);
        }

        sc.close();
    }

    public static void buildHeap(int i, int[] heap,int length) {
        // 这里因为子树有多层，要进行多层循环，所以先把父节点(顶)存下来，这样不用每次交换
        int temp = heap[i];

        // 开始调整当前非叶子节点及其子树的顺序,从该结点左子树开始
        for (int j = 2 * i + 1; j < length; j = j * 2 + 1) {
            // 目的是将最大的调整到这这棵子树的顶端
            // 先找到左右子树较大的
            if(j+1 < length && heap[j] < heap[j+1]) {
                j++;
            }

            // 若两子树中有大于父节点的树进行调整
            if(heap[j] > temp) {
                heap[i] = heap[j];
                i = j;  // 将当前子节点变成新的父节点
            } else {    // 若子树都比顶小直接跳出
                break;
            }
        }

        heap[i] = temp; // temp即最开始的顶放在最终位置
    }

    public  static void swap(int i,int j,int[] arr) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    private static void d1() {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {
            int len = sc.nextInt();

//            for (int i = len; i >= 1; i++) {
//
//
//            }

            int num1 = len, num2 = len - 1;


            BigDecimal b1 = new BigDecimal(num1);
            BigDecimal b2 = new BigDecimal(num2);
            BigDecimal d1 = new BigDecimal(1);


            // 最小公倍数
            System.out.println(b1.multiply(b2).subtract(d1));
        }

        sc.close();
    }


}
